the past, present, and future of my developments
Home About Projects Blog Games Contact Support!! This list will be updated when/if I remember (not likely) !!
NB: The 'Updated' date is for the section of this page on this website, not the updated date for the projects themselves.
32 bit OS
64 bit UEFI Dev
x86 Bootsector Games
Line Editor
TODO: x86/x86_64 Assembler
TODO: Intel 8080/Space Invaders Arcade Emulator
Youtube/Streaming Plans
Stream Ideas
Life/Health
Code and video series covering Operating System development from scratch, in assembly and C. I started this knowing nothing about OSes, without any formal education, learning as I go.
I'd like to support other architectures after getting done with basic x8664 UEFI development for an EFI OS loader. The 32 bit version can be kept (somewhat) concurrent as a version/branch of the OS, like arch/x86 vs. arch/x8664 or similar. That'd mean doing more modular code, and researching/implementing things for Aarch32/AArch64/RISCV/other architectures as well, fun!
Ideally, for edification and sadism, I'd like to have concurrent versions for architectures all in assembly as well, developed with fasm or nasm or other assemblers.
The ToDos.txt
file in the git repos will be a lot more up to date than any ramblings on this website.
See that file for future developments:
Estimated completion date: probably never, there will always be more work to do.
Code and video series covering development of an EFI OS Loader Application (a bootloader in UEFI parlance). It will be programmed in C, and tested with emulation via QEMU and real hardware (maybe only my 2019 Dell laptop). I'll be following the official specifications for UEFI, ACPI, FAT32, etc. as much as possible, showing how someone would write programs and tools following the documentation, deviating as necessary to find information.
Videos have been made for:
An intro covering tools used and a hello world program
Writing a program to create valid UEFI GPT disk images, so that Windows (well, mingw) & Linux can both build and use one tool to create image files for UEFI, without needing 'mtools' or other things that aren't available on both.
At minimum it will have an EFI System Partition and will add a 'BOOTX64.EFI' file to /EFI/BOOT to boot automatically from UEFI. It will also allow adding files to a separate data partition for use as e.g. a kernel/OS binary. That would allow loading and running an OS from an EFI OS Loader, and only one tool would be needed for basic UEFI development.
Slowly building a sample EFI Application to explore various parts of the UEFI Specification: Changing text and graphics modes, getting user input from keyboard and mouse, drawing a cursor, getting date/time, viewing disk partition info, loading a kernel, and so on.
TODOs:
Estimated completion date: Q2-Q3 2024; work, life, and health may push that out further.
Various copies or clones of cutdown versions of simple or classic arcade games, written in 16 bit x86 assembly and fitting in up to 510 bytes of space, to function as a valid bootsector that will run on hardware and emulation.
"Completed" bootsector games, usually a single level or basic mechanics/graphics:
TODOs:
A line based editor or Ed clone, implementing most of the main commands shown for 'man ed' on a linux distro, other than some command line flags (may only do -p for a prompt string, -t to run tests and exit, and maybe -s to reduce output for scripts).
The regex subset covers most/all of the POSIX basic regular expressions (BRE) and extended expressions (ERE) here, although it's probably buggy if you don't input exact and correct regex strings.
It also supports a few extra things like \w \W and \b \B.
The largest section of code is the regex compiling and parsing, but using a switch and state machine kept it pretty simple.
It is all in one self-contained C file, and should be at most 2500 lines including comments/blank lines. The only dependency is the C standard library, other than POSIX functions popen()/pclose() for calling out to a shell. Windows folks can probably use mingw or WSL, or remove those parts of the code. I'd add #ifdefs, but I don't really care about supporting Windows explicitly in my personal projects at this point, unless it's trivial to do so.
The books Software Tools in Pascal
for the editing chapter, and Ed Mastery
were sources of info and inspiration.
TODOs:
Current repo is here, that will change when I make a video series and associated repo(s) for that.
There isn't nearly as much information online, or videos, going over development of an assembler as opposed to a compiler. It should be a lot simpler and function as a subset of or more limited version of a compiler, that is architecture specific. Or can try to go the fasmg route and work for any arch.
Will support code generation for 16 bit real mode, 32 bit protected mode/compatibility mode, and 64 bit long mode at minimum. Probably will require a mode to be set via directives, and not assume a default of 16 bit code. Have looked at nasm source code for instruction tables and some basic parsing logic.
Will use intel manuals for instruction layout and logic to parse and generate machine code.
TODOs:
Most likely using SDL2, or 3 if it's out and usable, otherwise glfw and some audio library or another way to do cross platform graphics/input/sound.
TODOs:
tl;dr: Need to make a streaming schedule that also supports youtube videos and life in general.
Ideally streams would be 2+ hours 2x/week, or more. Maybe longer streams on weekends. Potential days are Mon/Wed/Fri/Sat/Sun. I'd also want to make around ~2 videos a week if possible, for Youtube, not stream VODs. Maybe releasing videos on a Monday/Friday schedule, or whenever they get done. One or both videos could be for the same project e.g. OS dev, or one could be something else (a shorter series, one-off video, other projects, etc.).
Currently, my videos need to be shorter to be able to record, edit, render, upload, and publish on a weekly cadence. I can make things currently for a release schedule every 3-4 days, but it's very tiring. I get fatigue forcing myself to code and talk for 2-4 hours, and am bad at focusing while doing so. Off camera, during a typical workday or weekend, I have spans of 3-8 hour programming sessions, but it's interspersed with movies or browsing, playing games, eating, hygeine, chores, etc.
I'm trying to read and program more in general lately instead of passively consuming content, but we'll see if that pays off any in the next several months or years.
Ideally YT videos would be 20-30 minutes at most, at least for "tutorial" style content, where it's adding new features or functionality in a modular way for any given project. Longer than that and it's not really doable for me with a full time job and other life responsibilities.
There can be a lot of research, programming, testing, etc. that doesn't end up in a video or on camera. It's pretty much a second part time job, needing 10-20+ hours a week. That eats into nights and weekends very fast.
Videos being shorter could lead to higher quality, visual diagrams or indicators, and better effort put in in general. Scripting is also an option, but I'd rather be honest and show how development is actually done in the moment than script things.
My reasoning for shorter videos is that forcing a short time limit means I have to program in a more modular, testable manner, which would lead to more composable, digestible, and understandable code. Not doing "clean code" principles, but actual feature development in a more succinct way. Instead of writing hundreds of lines of spaghetti that could be refactored into 20 lines with no loss of functionality, I'd be directly writing that 2nd draft only.
I'd still show or mention alternative ways to do things, and say that this is the 2nd/3rd/nth rewrite, but you wouldn't be sitting through 2 hours of dev work when the end result could have been done in 20 minutes. Currently I waste too much time, and too much of viewers' time, and feel bad about that.
For longer programming sessions, it's usually exploratory work and testing things, then refining it later. I think that would be better suited towards streaming, where it's live with feedback & banter with other people.
Streaming would also force me to get more work done more often on a more regular cadence, even if it's meandering and lacking focus and doing Q&A every 10 seconds. And everything else that comes with live-coding.
Another idea is working on YT projects on stream, and later refactoring and condensing that work into separate YT videos. The 1st drafts would be done on stream, and the streamlined code after rewriting would be typed, shown and explained on videos.
Programming streams could be how I do videos currently, but more haphazard and casual while chatting with stream, or it could be something else. Could be on a system like one I use for work, programming in RPG (the programming language) and SQL, on a publicly free and available IBM i (AS/400), in modern free format syntax. Unless you're a masochist and like RPGIII or II.
Programming normal applications, tools, or esoteric things like games could be fun. Like an RPG made in RPG, an ascii (but actually EBCDIC) roguelike or something.
Or could do any language like assembly, python, forth, COBOL, lisp, go, typescript, whatever really. Make homemade languages even. My inspiration for programming streams comes mainly from Tsoding but also folks like Jonhoo, Theprimeagen and others. I'd aim to develop full, new features and projects across streams, while chatting and answering questions. However, I do not want to be "just chatting" and not doing anything, as that could be time better spent watching someone else, unless it's a Q&A stream or similar.
Gaming streams would be having fun and/or relaxing. It could be anything from any era, any console or platform, really any games at all, probably as more of a variety streamer. Metal Arms, a full play through of Two Worlds 1 & 2 or other janky RPGs, programming/cpu building games, puzzle games, racing, fighting, FPS, strategy, anything.
I'd want to ease into streaming and not overextend, as I want to talk and fill silence too much, not being comfortable with myself, and forget to eat and drink and do chores and other things. Having chat may help with these and it seems like it'd be fun, or at least have people to talk to on a regular basis.
The weird parasocial aspect of streaming isn't great, but if I could provide help, guidance, inspiration, or a place to hang out then that would hopefully be okay and counteract it to an extent.
Above all else, I want to respect the viewer's time and provide some amount of value, else there'd be no point in streaming or watching.
The goal would be supporting some/most popular games or homebrews, and maybe stream playing games in the emulator.
Making homebrew games to learn older ISAs, CPUs, and game development. Could even try to play homemade games on a homemade emulator! Could be assembly, C, forth, or other lower level/simpler languages. But could also develop in a modern language and tooling.
Not programming for an older system/emulator, but for modern windows/linux PCs. This would be a separate, more up-to-date take on game dev, developing more modern games, in 2D or 3D, with cross platform frameworks/libraries.
Goal would be to get better at data structures & algorithmic thinking. These aren't the best ways to get foundational knowledge, more like small tests for fun. Unless you need it for job interviews. These would be used to learn why a solution works, from first principals if possible, NOT how to memorize solutions for the sake of memorizing alone to get through some tech co. interview bs.
Working on and implementing various languages, homemade or existing, to run on existing or homemade platforms or OSes.
Suggest ideas or content you'd like to see
I still take a lot of multi-week or month breaks from YT and hobby programming right now. For example, there's usually 2-6 YT videos every 2-4 months, which isn't much at all and I feel is a disservice to all the people that watch and wait for things.
The breaks are mainly due to work and life burnout, and general anxiety and recurring depressive episodes. Those are slowly getting better (significantly!) as I get older, but it's been a very, very long learning process and has required siginificant lifestyle changes and painful reflection.
I'm eating more fruits and vegetables, more protein and meats, fats instead of sugars, and less to no alcohol. I still eat ice cream and other sweets, because they're too damn delicious, but less than I used to. I still buy and drink beer on occasion; with meals when going out or traveling, or when truly relaxing at home and not just in a poor attempt to feel better.
A drink is nice to relax with when you have nothing going on, and want to enjoy the moment. But it's not good when you drink to make life bearable.
Cooking your own meals is great, and baking is awesome. Whole foods make you feel better than processed garbage all the time. Homemade bread (in a bread machine is good too!), cookies, biscuits, pies, etc. are great. Airfryers are also great, if you don't want to or can't grill.
Exercise is wonderful, daily exercise is required for me to sleep better and feel decent. Not feel great, but feel decent to begin with. Without regular exercise I don't want to do anything, everything sucks, and that functions as a baseline to how I'm thinking and acting to everything and everyone.
Pushups, pullups, squats, leg raises, and mowing the lawn for cardio is what I'm doing now, but should probably add in resistance training or weight lifting for what calisthenics doesn't cover. An exercise bike or treadmill for cardio would help too.
I'd like to get a punching bag and those iron rings that gymnasts use. That'd work for pullups but also engages more muscles to keep you stable, and has a lot more freedom of movement and things you can do that aren't possible with a pullup bar.
For sleep, I need 7+ hours every day. On work days, 9 hours feels like too little and I have a hard time leaving bed. On the weekends, 7 hours feels amazing and I wake up without an alarm. Funny how that works.
I am trying to get to a 22:00-6:00 sleep schedule, or at least 22:30-6:30. Having an extra 1-2 hours in the morning before work, or getting the start or tail end of a sunrise, helps a lot with my mood. It feels nice to slowly wakeup with a good coffee on my own schedule, and makes it feel like work doesn't take up the majority of my weekdays anymore.
I have a renewed outlook on life now, though not any true sense of purpose yet. I'd like to develop decent, free tooling to help others learn or give some mild form of entertainment; to feel useful by giving back and teaching and showing things that aren't covered elsewhere, in my own way.
Barring a purpose, however, at least I don't want to die anymore, which is not something I could have said or meant a year or two ago. Having objectively better diet, exercise, sleep, and confidence has helped make that happen, as well as the slowly accruing wisdom and maturity that comes with age.
I still want to keep learning and improving and make cool shit anyway, or at least simplified versions or rewrites of existing shit to help learn to make the real cool shit later.
Kid me wanted to be an astronaut or an F1 driver, the least I can do is show him someone in hardware/software can be cool too.